﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using JPSOFTWARE.BON.Modelos;
using JPSOFTWARE.BON.Modelos.Interfaces;
using System.Data.Common;

namespace JPSOFTWARE.BON.DAL
{
    public class DistribuidoraDAL : BaseDAL, IDistribuidora
    {
        readonly dbBONDataContext _dbBON = null;        

        public DistribuidoraDAL()
        {
            _dbBON = new dbBONDataContext(StringConexao());
        }

        public DistribuidoraIncluirModel IncluirDistribuidora(DistribuidoraIncluirModel distribuidoraIncluirModel, int IdUsuario)
        {
            DistribuidoraIncluirModel dados = new DistribuidoraIncluirModel();

            DbTransaction transacao = null;

            try
            {
                _dbBON.Connection.Open();
                transacao = _dbBON.Connection.BeginTransaction();
                _dbBON.Transaction = transacao;

                TBL_DISTRIBUIDORA tblDistribuidora = new TBL_DISTRIBUIDORA
               {
                   COD_USUARIO = IdUsuario,
                   NR_CNPJ = distribuidoraIncluirModel.Cnpj,
                   NM_DISTRIBUIDORA = distribuidoraIncluirModel.NomeDistribuidora,
                   DS_DISTRIBUIDORA = distribuidoraIncluirModel.Descricao,
                   NR_TELEFONE = distribuidoraIncluirModel.Telefone,
                   NR_CELULAR = distribuidoraIncluirModel.Celular,
                   DS_EMAIL = distribuidoraIncluirModel.Email,
                   DS_ENDERECO = distribuidoraIncluirModel.Endereco,
                   DS_BAIRRO = distribuidoraIncluirModel.Bairro,
                   NM_CIDADE = distribuidoraIncluirModel.Cidade,
                   NM_UF = distribuidoraIncluirModel.Uf,
                   NR_CEP = distribuidoraIncluirModel.Cep,
                   ST_ATIVO = false,
                   DT_ALTERACAO = DateTime.Now,
                   NR_LATITUDE = distribuidoraIncluirModel.Latitude,
                   NR_LONGITUDE = distribuidoraIncluirModel.Longitude
               };

                _dbBON.TBL_DISTRIBUIDORAs.InsertOnSubmit(tblDistribuidora);
                _dbBON.SubmitChanges();

                transacao.Commit();

                dados.IdDistribuidora = tblDistribuidora.COD_DISTRIBUIDORA;                
            }
            catch (Exception ex)
            {
                if (transacao != null)
                {
                    transacao.Rollback();
                    throw ex;
                }
            }
            finally
            {
                _dbBON.Connection.Close();
            }
            return dados;
        }

        public bool VerificaSeExisteDistribuidora(string cnpj)
        {
            bool retorno = false;
            try
            {
                var consulta = _dbBON.TBL_DISTRIBUIDORAs.Where(x => x.NR_CNPJ.Equals(cnpj)).FirstOrDefault();

                if (consulta != null)
                {
                    return true;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }

        public int ListarDistribuidoraPorUsuario(int IdUsuario)
        {
            int IdDistribuidora = 0;
            try
            {
                TBL_DISTRIBUIDORA distribuidora = (from d in _dbBON.TBL_DISTRIBUIDORAs
                                         where d.COD_USUARIO == IdUsuario
                                         select d).FirstOrDefault();
                if (distribuidora != null)
                {
                    var consulta = distribuidora.COD_DISTRIBUIDORA;
                    if (consulta > 0)
                        IdDistribuidora = consulta;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return IdDistribuidora;
        }

        public bool VerificaSeExisteDistribuidora(int IdUsuario)
        {
            bool retorno = false;

            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs
                                where d.COD_USUARIO == IdUsuario
                                select d).Count();

                if (consulta > 0)
                {
                    retorno = true;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }

        public DistribuidoraModel SelecionarDistribuidora(int IdDistribuidora, int IdUsuario)
        {
            DistribuidoraModel distribuidoraModel = new DistribuidoraModel();

            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs
                                where d.COD_USUARIO == IdUsuario && d.COD_DISTRIBUIDORA == IdDistribuidora
                                select new
                                {                                    
                                    _IdDistribuidora = d.COD_DISTRIBUIDORA,
                                    _Cnpj = d.NR_CNPJ,
                                    _NomeDistribuidora = d.NM_DISTRIBUIDORA,
                                    _Descricao = d.DS_DISTRIBUIDORA,
                                    _Telefone = d.NR_TELEFONE,
                                    _Celular = d.NR_CELULAR,
                                    _Endereco = d.DS_ENDERECO,
                                    _Bairro = d.DS_BAIRRO,
                                    _Cidade = d.NM_CIDADE,
                                    _Uf = d.NM_UF,
                                    _Cep = d.NR_CEP,
                                    _Status = d.ST_ATIVO,
                                    _Latitude = d.NR_LATITUDE,
                                    _Longitude = d.NR_LONGITUDE
                                }).FirstOrDefault();

                distribuidoraModel = new DistribuidoraModel
                {
                    IdDistribuidora = consulta._IdDistribuidora,
                    Cnpj = consulta._Cnpj,
                    NomeDistribuidora = consulta._NomeDistribuidora,
                    Descricao = consulta._Descricao,
                    Telefone = consulta._Telefone,
                    Celular = consulta._Celular,
                    Endereco = consulta._Endereco,
                    Bairro = consulta._Bairro,
                    Cidade = consulta._Cidade,
                    Uf = consulta._Uf,
                    Cep = consulta._Cep,
                    Status = consulta._Status == true ? "Ativo" : "Inativo"
                };
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return distribuidoraModel;
        }

        public List<DistribuidoraView> ListarDistribuidoraView(int IdUsuario)
        {
            List<DistribuidoraView> lista = new List<DistribuidoraView>();
            DistribuidoraView distribuidoraView;
            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs                                
                                where d.COD_USUARIO == IdUsuario
                                select d).ToList();

                foreach (var item in consulta)
                {
                    distribuidoraView = new DistribuidoraView()
                    {
                        IdDistribuidora = item.COD_DISTRIBUIDORA,
                        NomeDistribuidora = item.NM_DISTRIBUIDORA,
                        Endereco = item.DS_ENDERECO,
                        Telefone = item.NR_TELEFONE,
                        Celular = item.NR_CELULAR,
                        Email = item.DS_EMAIL,
                        Bairro = item.DS_BAIRRO,
                        Cidade = item.NM_CIDADE,
                        Estado = item.NM_UF,
                        CEP = item.NR_CEP,
                        Latitude = item.NR_LATITUDE,
                        Longitude = item.NR_LONGITUDE,
                        Cnpj = item.NR_CNPJ,
                        Descricao = item.DS_DISTRIBUIDORA,
                        Status = item.ST_ATIVO == true ? "Ativo" : "Inativo"
                    };
                    lista.Add(distribuidoraView);
                };
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lista;
        }

        public List<DistribuidoraView> ListarDistribuidora(int IdDistribuidora)
        {
            List<DistribuidoraView> lista = new List<DistribuidoraView>();
            DistribuidoraView distribuidoraView;
            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs
                                where d.COD_DISTRIBUIDORA == IdDistribuidora
                                select d).ToList();

                foreach (var item in consulta)
                {
                    distribuidoraView = new DistribuidoraView()
                    {
                        IdDistribuidora = item.COD_DISTRIBUIDORA,
                        NomeDistribuidora = item.NM_DISTRIBUIDORA,
                        Endereco = item.DS_ENDERECO,
                        Telefone = item.NR_TELEFONE,
                        Celular = item.NR_CELULAR,
                        Email = item.DS_EMAIL,
                        Bairro = item.DS_BAIRRO,
                        Cidade = item.NM_CIDADE,
                        Estado = item.NM_UF,
                        CEP = item.NR_CEP,
                        Latitude = item.NR_LATITUDE,
                        Longitude =item.NR_LONGITUDE,
                        Cnpj = item.NR_CNPJ,
                        Descricao = item.DS_DISTRIBUIDORA,
                        Status = item.ST_ATIVO == true ? "Ativo" : "Inativo"
                    };
                    lista.Add(distribuidoraView);
                };
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lista;
        }

        public List<DistribuidoraView> ListarDistribuidoraView()
        {
            List<DistribuidoraView> lista = new List<DistribuidoraView>();
            DistribuidoraView empresaView;
            try
            {
                var consulta = _dbBON.TBL_DISTRIBUIDORAs.Where(x => x.ST_ATIVO.Equals(true)).ToList();

                foreach (var item in consulta)
                {
                    empresaView = new DistribuidoraView()
                    {
                        IdDistribuidora = item.COD_DISTRIBUIDORA,
                        NomeDistribuidora = item.NM_DISTRIBUIDORA,
                        Endereco = item.DS_ENDERECO,
                        Telefone = item.NR_TELEFONE,
                        Celular = item.NR_CELULAR,
                        Email = item.DS_EMAIL,
                        Bairro = item.DS_BAIRRO,
                        Cidade = item.NM_CIDADE,
                        Estado = item.NM_UF,
                        CEP = item.NR_CEP,
                        Latitude = item.NR_LATITUDE,
                        Longitude =item.NR_LONGITUDE,
                        Cnpj = item.NR_CNPJ,
                        Descricao = item.DS_DISTRIBUIDORA,
                        Status = item.ST_ATIVO == true ? "Ativo" : "Inativo"
                    };
                    lista.Add(empresaView);
                };
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lista;
        }

        public List<DistribuidoraView> ListarDistribuidoraViewAdministrar()
        {
            List<DistribuidoraView> lista = new List<DistribuidoraView>();
            DistribuidoraView empresaView;
            try
            {
                var consulta = _dbBON.TBL_DISTRIBUIDORAs.ToList();

                foreach (var item in consulta)
                {
                    empresaView = new DistribuidoraView()
                    {
                        IdDistribuidora = item.COD_DISTRIBUIDORA,
                        NomeDistribuidora = item.NM_DISTRIBUIDORA,
                        Endereco = item.DS_ENDERECO,
                        Telefone = item.NR_TELEFONE,
                        Celular = item.NR_CELULAR,
                        Email = item.DS_EMAIL,
                        Bairro = item.DS_BAIRRO,
                        Cidade = item.NM_CIDADE,
                        Estado = item.NM_UF,
                        CEP = item.NR_CEP,
                        Latitude = item.NR_LATITUDE,
                        Longitude = item.NR_LONGITUDE,
                        Cnpj = item.NR_CNPJ,
                        Descricao = item.DS_DISTRIBUIDORA,
                        Status = item.ST_ATIVO == true ? "Ativo" : "Inativo"
                    };
                    lista.Add(empresaView);
                };
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lista;
        }

        public List<DistribuidoraCombo> CarregarDistribuidora(int IdUsuario)
        {
            DistribuidoraCombo distribuidoraCombo;

            List<DistribuidoraCombo> lista = new List<DistribuidoraCombo>();
            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs
                                where d.COD_USUARIO == IdUsuario
                                select d).ToList();

                if (consulta != null)
                {
                    foreach (var item in consulta)
                    {
                        distribuidoraCombo = new DistribuidoraCombo
                        {
                            IdDistribuidora = item.COD_DISTRIBUIDORA,
                            Distribuidora = item.NM_DISTRIBUIDORA
                        };
                        lista.Add(distribuidoraCombo);
                    }
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lista;
        }

        public List<DistribuidoraCombo> CarregarDistribuidora()
        {
            DistribuidoraCombo distribuidoraCombo;

            List<DistribuidoraCombo> lista = new List<DistribuidoraCombo>();
            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs                                
                                select d).ToList();

                if (consulta != null)
                {
                    foreach (var item in consulta)
                    {
                        distribuidoraCombo = new DistribuidoraCombo
                        {
                            IdDistribuidora = item.COD_DISTRIBUIDORA,
                            Distribuidora = item.NM_DISTRIBUIDORA
                        };
                        lista.Add(distribuidoraCombo);
                    }
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return lista;
        }

        public DistribuidoraView SelecionarDistribuidora(int? id, int IdUsuario)
        {
            DistribuidoraView distribuidoraView = null;
            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs
                                where d.COD_DISTRIBUIDORA == id && d.COD_USUARIO == IdUsuario
                                select d).FirstOrDefault();

                if (consulta != null)
                {
                    distribuidoraView = new DistribuidoraView
                    {
                        IdDistribuidora = consulta.COD_DISTRIBUIDORA,
                        NomeDistribuidora = consulta.NM_DISTRIBUIDORA,
                        Cnpj = consulta.NR_CNPJ,
                        Descricao = consulta.DS_DISTRIBUIDORA,
                        Status = consulta.ST_ATIVO == true ? "Ativo" : "Inativo"
                    };
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return distribuidoraView;
        }

        public DistribuidoraView SelecionarDistribuidoraAdministrar(int id)
        {
            DistribuidoraView distribuidoraView = null;
            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs
                                where d.COD_DISTRIBUIDORA == id
                                select d).FirstOrDefault();

                if (consulta != null)
                {
                    distribuidoraView = new DistribuidoraView
                    {
                        IdDistribuidora = consulta.COD_DISTRIBUIDORA,
                        NomeDistribuidora = consulta.NM_DISTRIBUIDORA,
                        Cnpj = consulta.NR_CNPJ,
                        Descricao = consulta.DS_DISTRIBUIDORA,
                        Status = consulta.ST_ATIVO == true ? "Ativo" : "Inativo"
                    };
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return distribuidoraView;
        }

        public DistribuidoraView SelecionarDistribuidora(int IdDistribuidora)
        {
            DistribuidoraView distribuidoraView = null;
            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs
                                where d.COD_DISTRIBUIDORA == IdDistribuidora
                                select d).FirstOrDefault();

                if (consulta != null)
                {
                    distribuidoraView = new DistribuidoraView
                    {
                        IdDistribuidora = consulta.COD_DISTRIBUIDORA,
                        NomeDistribuidora = consulta.NM_DISTRIBUIDORA,
                        Cnpj = consulta.NR_CNPJ,
                        Endereco = consulta.DS_ENDERECO,
                        Telefone = consulta.NR_TELEFONE,
                        Celular = consulta.NR_CELULAR,
						Email = consulta.DS_EMAIL,
                        Bairro = consulta.DS_BAIRRO,
                        Cidade = consulta.NM_CIDADE,
                        Estado = consulta.NM_UF,
                        Status = consulta.ST_ATIVO == true ? "Ativo" : "Inativo"
                    };
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return distribuidoraView;
        }

        public bool ExcluirDistribuidora(int id)
        {
            bool retorno = false;
            System.Data.Common.DbTransaction transacao = null;

            try
            {
                _dbBON.Connection.Open();
                transacao = _dbBON.Connection.BeginTransaction();
                _dbBON.Transaction = transacao;
                                              
                //DELETE TODOS OS PRODUTOS DA DISTRIBUIDORA
                List<TBL_PRODUTO_DISTRIBUIDORA> tbProdutoDistribuidora = _dbBON.TBL_PRODUTO_DISTRIBUIDORAs.Where(X => X.COD_DISTRIBUIDORA == id).ToList();
                if(tbProdutoDistribuidora.Count > 0)
                _dbBON.TBL_PRODUTO_DISTRIBUIDORAs.DeleteAllOnSubmit(tbProdutoDistribuidora);

                // DELETA DISTRIBUIDORA
                TBL_DISTRIBUIDORA tbDistribuidora = _dbBON.TBL_DISTRIBUIDORAs.FirstOrDefault(e => e.COD_DISTRIBUIDORA == id);
                _dbBON.TBL_DISTRIBUIDORAs.DeleteOnSubmit(tbDistribuidora);
                _dbBON.SubmitChanges();              

                transacao.Commit();
                retorno = true;
            }
            catch (Exception ex)
            {
                if (transacao != null)
                {
                    transacao.Rollback();
                }
                throw ex;
            }
            finally
            {
                _dbBON.Connection.Close();
            }
            return retorno;
        }

        public bool ExcluirDistribuidoraAdministrar(int id)
        {
            bool retorno = false;
            System.Data.Common.DbTransaction transacao = null;

            try
            {
                _dbBON.Connection.Open();
                transacao = _dbBON.Connection.BeginTransaction();
                _dbBON.Transaction = transacao;

                //DELETE TODOS OS PRODUTOS DA DISTRIBUIDORA
                List<TBL_PRODUTO_DISTRIBUIDORA> tbProdutoDistribuidora = _dbBON.TBL_PRODUTO_DISTRIBUIDORAs.Where(X => X.COD_DISTRIBUIDORA == id).ToList();
                if (tbProdutoDistribuidora.Count > 0)
                    _dbBON.TBL_PRODUTO_DISTRIBUIDORAs.DeleteAllOnSubmit(tbProdutoDistribuidora);

                // DELETA DISTRIBUIDORA
                TBL_DISTRIBUIDORA tbDistribuidora = _dbBON.TBL_DISTRIBUIDORAs.FirstOrDefault(e => e.COD_DISTRIBUIDORA == id);
                _dbBON.TBL_DISTRIBUIDORAs.DeleteOnSubmit(tbDistribuidora);
                _dbBON.SubmitChanges();

                transacao.Commit();
                retorno = true;
            }
            catch (Exception ex)
            {
                if (transacao != null)
                {
                    transacao.Rollback();
                }
                throw ex;
            }
            finally
            {
                _dbBON.Connection.Close();
            }
            return retorno;
        }

        public DistribuidoraEditarModel EditarDistribuidoraAdministrar(int IdDistribuidora)
        {
            DistribuidoraEditarModel distribuidoraEditarModel = new DistribuidoraEditarModel();

            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs
                                where d.COD_DISTRIBUIDORA.Equals(IdDistribuidora)
                                select new
                                {
                                    _IdDistribuidora = d.COD_DISTRIBUIDORA,
                                    _Cnpj = d.NR_CNPJ,
                                    _NomeDistribuidora = d.NM_DISTRIBUIDORA,
                                    _Descricao = d.DS_DISTRIBUIDORA,
                                    _Telefone = d.NR_TELEFONE,
                                    _Email = d.DS_EMAIL,
                                    _Celular = d.NR_CELULAR,
                                    _Endereco = d.DS_ENDERECO,
                                    _Bairro = d.DS_BAIRRO,
                                    _Cidade = d.NM_CIDADE,
                                    _Uf = d.NM_UF,
                                    _Cep = d.NR_CEP,
                                    _Lat = d.NR_LATITUDE,
                                    _Lon = d.NR_LONGITUDE,
                                    _Status = (bool)d.ST_ATIVO,

                                }).FirstOrDefault();

                distribuidoraEditarModel = new DistribuidoraEditarModel
                {
                    IdDistribuidora = consulta._IdDistribuidora,
                    Cnpj = consulta._Cnpj,
                    NomeDistribuidora = consulta._NomeDistribuidora,
                    Descricao = consulta._Descricao,
                    Telefone = consulta._Telefone,
                    Email = consulta._Email,
                    Celular = consulta._Celular,
                    Endereco = consulta._Endereco,
                    Bairro = consulta._Bairro,
                    Cidade = consulta._Cidade,
                    Uf = consulta._Uf,
                    Cep = consulta._Cep,
                    Latitude = consulta._Lat,
                    Longitude = consulta._Lon,
                    Status = consulta._Status,
                };
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return distribuidoraEditarModel;
        }

        public DistribuidoraEditarModel EditarDistribuidora(int IdDistribuidora, int IdUsuario)
        {
            DistribuidoraEditarModel distribuidoraEditarModel = new DistribuidoraEditarModel();

            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs                                
                                where d.COD_DISTRIBUIDORA.Equals(IdDistribuidora) && d.COD_USUARIO.Equals(IdUsuario)
                                select new
                                {
                                    _IdDistribuidora = d.COD_DISTRIBUIDORA,
                                    _Cnpj = d.NR_CNPJ,
                                    _NomeDistribuidora = d.NM_DISTRIBUIDORA,
                                    _Descricao = d.DS_DISTRIBUIDORA,
                                    _Telefone = d.NR_TELEFONE,
                                    _Email = d.DS_EMAIL,
                                    _Celular = d.NR_CELULAR,
                                    _Endereco = d.DS_ENDERECO,
                                    _Bairro = d.DS_BAIRRO,
                                    _Cidade = d.NM_CIDADE,
                                    _Uf = d.NM_UF,
                                    _Cep = d.NR_CEP,
                                    _Lat = d.NR_LATITUDE,
                                    _Lon = d.NR_LONGITUDE,
                                    _Status = (bool)d.ST_ATIVO,

                                }).FirstOrDefault();

                distribuidoraEditarModel = new DistribuidoraEditarModel
                {                    
                    IdDistribuidora = consulta._IdDistribuidora,
                    Cnpj = consulta._Cnpj,
                    NomeDistribuidora = consulta._NomeDistribuidora,
                    Descricao = consulta._Descricao,
                    Telefone = consulta._Telefone,
                    Email = consulta._Email,
                    Celular = consulta._Celular,
                    Endereco = consulta._Endereco,
                    Bairro = consulta._Bairro,
                    Cidade = consulta._Cidade,
                    Uf = consulta._Uf,
                    Cep = consulta._Cep,
                    Latitude = consulta._Lat,
                    Longitude = consulta._Lon,
                    Status = consulta._Status,
                };
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return distribuidoraEditarModel;
        }

        public DistribuidoraEditarModel EditarDistribuidora(int IdDistribuidora)
        {
            DistribuidoraEditarModel distribuidoraEditarModel = new DistribuidoraEditarModel();

            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs
                                where d.COD_DISTRIBUIDORA.Equals(IdDistribuidora)
                                select new
                                {
                                    _IdDistribuidora = d.COD_DISTRIBUIDORA,
                                    _Cnpj = d.NR_CNPJ,
                                    _NomeDistribuidora = d.NM_DISTRIBUIDORA,
                                    _Descricao = d.DS_DISTRIBUIDORA,
                                    _Telefone = d.NR_TELEFONE,
                                    _Email = d.DS_EMAIL,
                                    _Celular = d.NR_CELULAR,
                                    _Endereco = d.DS_ENDERECO,
                                    _Bairro = d.DS_BAIRRO,
                                    _Cidade = d.NM_CIDADE,
                                    _Uf = d.NM_UF,
                                    _Cep = d.NR_CEP,
                                    _Lat = d.NR_LATITUDE,
                                    _Lon = d.NR_LONGITUDE,
                                    _Status = (bool)d.ST_ATIVO,

                                }).FirstOrDefault();

                distribuidoraEditarModel = new DistribuidoraEditarModel
                {
                    IdDistribuidora = consulta._IdDistribuidora,
                    Cnpj = consulta._Cnpj,
                    NomeDistribuidora = consulta._NomeDistribuidora,
                    Descricao = consulta._Descricao,
                    Telefone = consulta._Telefone,
                    Email = consulta._Email,
                    Celular = consulta._Celular,
                    Endereco = consulta._Endereco,
                    Bairro = consulta._Bairro,
                    Cidade = consulta._Cidade,
                    Uf = consulta._Uf,
                    Cep = consulta._Cep,
                    Latitude = consulta._Lat,
                    Longitude = consulta._Lon,
                    Status = consulta._Status,
                };
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return distribuidoraEditarModel;
        }

        public bool EditarDistribuidora(DistribuidoraEditarModel distribuidoraEditarModel)
        {
            bool retorno = false;

            DbTransaction transacao = null;

            try
            {
                _dbBON.Connection.Open();
                transacao = _dbBON.Connection.BeginTransaction();
                _dbBON.Transaction = transacao;

                TBL_DISTRIBUIDORA tblDistribuidora = (from d in _dbBON.TBL_DISTRIBUIDORAs                                          
                                          where /*d.COD_USUARIO == distribuidoraEditarModel.IdUsuario &&*/ d.COD_DISTRIBUIDORA == distribuidoraEditarModel.IdDistribuidora
                                          select d).FirstOrDefault();
                
                tblDistribuidora.NR_CNPJ = distribuidoraEditarModel.Cnpj;
                tblDistribuidora.NM_DISTRIBUIDORA = distribuidoraEditarModel.NomeDistribuidora;
                tblDistribuidora.DS_DISTRIBUIDORA = distribuidoraEditarModel.Descricao;
                tblDistribuidora.NR_TELEFONE = distribuidoraEditarModel.Telefone;
                tblDistribuidora.NR_CELULAR = distribuidoraEditarModel.Celular;
                tblDistribuidora.DS_EMAIL = distribuidoraEditarModel.Email;
                tblDistribuidora.NR_CEP = distribuidoraEditarModel.Cep;
                tblDistribuidora.DS_ENDERECO = distribuidoraEditarModel.Endereco;
                tblDistribuidora.NM_CIDADE = distribuidoraEditarModel.Cidade;
                tblDistribuidora.DS_BAIRRO = distribuidoraEditarModel.Bairro;
                tblDistribuidora.NM_UF = distribuidoraEditarModel.Uf;
                tblDistribuidora.NR_LATITUDE = distribuidoraEditarModel.Latitude;
                tblDistribuidora.NR_LONGITUDE = distribuidoraEditarModel.Longitude;
                tblDistribuidora.ST_ATIVO = distribuidoraEditarModel.Status;
                tblDistribuidora.DT_ALTERACAO = DateTime.Now;

                _dbBON.SubmitChanges();                
                transacao.Commit();
                retorno = true;
            }
            catch (Exception ex)
            {
                if (transacao != null)
                {
                    transacao.Rollback();
                    throw ex;
                }
            }
            finally
            {
                _dbBON.Connection.Close();
            }
            return retorno;
        }

        public List<EstadosView> ListarEstados()
        {
            List<EstadosView> lista = new List<EstadosView>();

            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs
                                orderby d.NM_UF
                                select new
                                {
                                    Uf = d.NM_UF
                                }).Distinct().ToList();
                foreach (var item in consulta)
                {
                    EstadosView estadoView = new EstadosView
                    {
                        Estado = item.Uf
                    };
                    lista.Add(estadoView);
                }
                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<CidadeView> ListarCidades(string estado)
        {
            List<CidadeView> lista = new List<CidadeView>();

            try
            {
                var consulta = (from d in _dbBON.TBL_DISTRIBUIDORAs
                                where d.NM_UF.Equals(estado)
                                orderby d.NM_CIDADE
                                select new
                                {
                                    Cidade = d.NM_CIDADE
                                }).Distinct().ToList();
                foreach (var item in consulta)
                {
                    CidadeView cidadeView = new CidadeView
                    {
                        Cidade = item.Cidade
                    };
                    lista.Add(cidadeView);
                }
                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}